package Demo_Old.Demo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
import java.util.Vector;

public class ArryListDemo {

    public static void main(String[] args) {

        /*
        *     1、Vector也是List接口的一个子类实现
         *    2、Vector跟ArrayList一样，底层都是使用数组进行实现的
         *    3、面试经常问区别：
         *          （1）ArrayList是线程不安全的，效率高，Vector是线程安全的效率低
         *          （2）ArrayList在进行扩容的时候，是扩容1.5倍，Vector扩容的时候扩容原来的2倍
        * */

        ArrayList list=new ArrayList();
        Vector vector=new Vector();


        list.add(2);
        list.add("a");
        list.add("b");

        ArrayList list1=new ArrayList();

        list1.add(1);
       list1.add("b");

       /*
       * 在java代码中包含三种循环的方式
        *   do...while
        *   while
        *   for
        * 还有一种增强for循环的方式，可以简化循环的编写
        *
        *
        *   所有的集合类都默认实现了Iterable的接口，实现此接口意味着具备了增强for循环的能力，也就是for-each
        *      增强for循环本质上使用的也是iterator的功能
        *      方法：
        *               iterator()
        *               foreach()
        *   在iterator的方法中，要求返回一个Iterator的接口子类实例对象
        *       此接口中包含了
        *               hasNext()
        *               next()
        *
        *   在使用iterator进行迭代的过程中如果删除其中的某个元素会报错，并发操作异常，
        *   应使用iterator.remove()删除，因此
        *       如果遍历的同时需要修改元素，建议使用listIterator（），
        *   ListIterator迭代器提供了向前和向后两种遍历的方式
        *       始终是通过cursor和lastret的指针来获取元素值及向下的遍历索引
        *       当使用向前遍历的时候必须要保证指针在迭代器的结果，否则无法获取结果值
       * */
        Iterator iterator = list.iterator();
        ListIterator listIterator = list.listIterator();
        int i = 0;
        while(listIterator.hasNext()){
            Object next = listIterator.next();
            if(i == 1){
                Object previous = listIterator.previous();
                Object previous2 = listIterator.previous();

//                System.out.println(previous);
            }
            i++;
//            if(next.equals("a")){
//                listIterator.remove();
////                Object previous = listIterator.previous();
////                System.out.println(previous);
//            }
            System.out.println(next);
        }

        System.out.println("--------");

        /*
        * 增强for循环内部使用的就是迭代器
        * */
        for (Object o : list) {
            System.out.println(o);
        }


//        list1.add("a");
//        list1.add("c");

//        System.out.println(list1.retainAll(list));
//        System.out.println(list1);
//        System.out.println(list.indexOf("b"));
//        System.out.println(list.removeAll(list1));
//        System.out.println(list);
//        List list2=List.of(1,1,2,5);
//        System.out.println(list2);
    }
}
